您可以在这里了解如何将您的 Kanzi 应用程序部署到运行 INTEGRITY 实时操作系统的 i.MX6 SABRE 平台。自 2.7.1 版以来,Kanzi 支持平台,而且经过测试,可以与运行 Debian GNU/Linux 6.0.7 版的 MULTI IDE 6.1.4 版配合使用。
Kanzi 可应要求提供将 Kanzi 应用程序部署到 i.MX6/INTEGRITY 所需的 i.MX6/INTEGRITY 库。请通过如下方式联系 Rightware 销售部 sales@rightware.com 了解更多信息。
您需要先为 i.MX6 SABRE 准备一个有效的 INTEGRITY 开发环境,然后才能构建和部署 Kanzi 应用程序,包括:
有关如何建立 INTEGRITY 开发环境的信息,请参阅 Green Hills 软件提供的《i.MX6 SABRE Lite BSP 用户指南》。
除了有效的 INTEGRITY 开发环境以外,您还需要具备:
在开始将 Kanzi 应用程序部署到 i.MX6/INTEGRITY 之前,请确保您可以成功部署并运行 GPU 支持包随附的其中一个 OpenGL 示例。
请注意,这里的示例假定您的开发环境安装在 /opt/sdk/ghs/
中,而且 TFTP 服务器从 /srv/tftp/
目录提供文件。
Kanzi 应用程序会读取从内存卡文件系统的 Kanzi Studio 中导出的资产和场景描述。内存卡可以是用于托管 U-Boot 引导程序的那个内存卡。准备一个 FAT 格式的内存卡,并确保能够轻松在您的台式机和目标主板之间交换内存卡。
Kanzi 开发文件是以压缩存档的形式提供的。如果收到了以独立包形式提供的 i.MX6/INTEGRITY 支持文件,请将独立包的内容复制到 <KanziWorkspace>/Engine 中。
独立包中包含一个名为的 kzb_player 的最小示例工程,您可以将它用作模板来创建新的 Kanzi 应用程序。要将示例工程加载到 i.MX6 目标的适当默认工程中,请将如下文件添加到 openGL.gpj
中:
../kzb_player/configs/platforms/integrity-arm/kzb_player.gpj [INTEGRITY Application]
打开 kzb_player_as0.gpj
并编辑宏 KZ_ENGINE_DIR
,以使其指向您的 Kanzi Engine 安装目录。例如:
macro KZ_ENGINE_DIR=/home/buildserver/workspace/v2_7/Kanzi/Engine
如果正确完成加载,工程会完成编译且不会出错。
当为 i.MX6/INTEGRITY 部署 Kanzi 应用程序时,请记住,您必须在 onConfigure()
之前调用以下 INTEGRITY 特定函数:
kzsFileBaseSetResourceDirectory("/")
函数调用会将 kzb 文件在文件系统中的位置告诉 Kanzi。VivanteInit()
函数会初始化 GPU 子系统。当以静态方式链接 GPU 库时,您需要明确调用 GPU 子系统。WaitForFileSystemInitialization()
函数调用会解决由于进程在 INTEGRITY 下并行启动而造成的竞争状态。kzb_player 示例默认会调用这些函数。
如果您是首次部署 Kanzi 应用程序或者您对程序代码进行了更改:
您可以使用如下脚本完成最后两个步骤:
#!/bin/sh /opt/sdk/ghs/comp_201314/gmemfile kzb_player && \ mkimage -A arm -O linux -C none -a 10800000 -n INTEGRITY -d kzb_player.bin /srv/tftp/kzb_player.uimage
如果您的目标设备支持压缩映像,则可以通过创建一个 zimage 来节省一些时间:
#!/bin/sh /opt/sdk/ghs/comp_201314/gmemfile kzb_player && \ gzip -f kzb_player.bin && \ mkimage -A arm -O linux -C gzip -a 10800000 -n INTEGRITY -d kzb_player.bin.gz \ /srv/tftp/kzb_player.zimage
当在 Kanzi Studio 中更改您的 Kanzi 应用程序时,请将新的 kzb 二进制文件导出到内存卡。在部署 Kanzi 应用程序之前,内存卡中必须包含:
将内存卡连接到目标主板,然后再对目标主板通电。
您可以在 U-Boot 引导程序中执行以下命令,以部署和引导 U-boot 映像:
tftp 70000000 kzb_player.uimage
bootm 70000000
为了节省时间,您可以将这些要在通电时发出的命令存储到 U-Boot 环境中。确切的部署地址(在本例中为 0x70000000
)取决于目标。请联系您的硬件供应商,以了解详细信息。
在内核引导期间,会查找以下重要日志消息:
日志消息 | 含义 |
---|---|
USB..............................Success
|
USB 子系统已初始化。Kanzi 使用 USB 来获得鼠标和键盘输入。 |
GALcore 4.6.9.1210 (Jul 31 2013).................Success
|
图形驱动程序已初始化。 |
VFS: Mounting SDCardDev:a on / with options: update,rw
|
显示 SD 卡的装载位置。显示的路径(在本例中为 / )必须与在应用程序启动期间指定给 kzsFileBaseSetResourceDirectory() 的路径相匹配。 |
引导了映像之后,要在 MULTI IDE 中使用 rtserv2 协议来附加调试器,请转到主菜单 (Main) > 连接 (Connect) > rtserv2。
建立了连接之后,调试器窗口将打开。
选择 kzb_player_as0
下新创建的初始进程并点击绿色的箭头按钮,以启动应用程序。
您可以设置在 kzb_player_as0.gpj
中使用调试版本还是发行版本:
_DEBUG
预处理器宏,并将调试版本与调试库链接在一起:-D_DEBUG -L$(KZ_ENGINE_DIR) /lib/integrity-arm/ES2_Debug
_DEBUG
宏,并将发行版本与发行库链接在一起:-L$(KZ_ENGINE_DIR)/lib/integrity-arm/ES2_Release
切换版本之后,您必须重新编译和重新部署应用程序。
请注意,Kanzi 文档通过 libsystem、libcore、libuser 和 libapplicationframework 等名称来引用 Kanzi 库。对于 i.MX6/INTEGRITY 端口,这些名称被重命名为 libkzsystem、libkzcore、libkzuser 和 libkzapplicationframework,以免与现有的库发生名称冲突。